import moment from "moment";
import router from "../router/index";
import {productLineList, branchList} from './definition'

moment.locale("zh-cn");

export const return2Main = () => {
    // https://localhost:3000/?phone=12345678911&mid=TT-0C001010
    const phone = localStorage.getItem("phoneNumber") || "";
    const mid = localStorage.getItem("mindray-mid") || "";
    const openid = localStorage.getItem("openid") || "";
    router.replace({
        path: "/",
        query: { phone: phone, mid: mid, openid: openid },
    });
    const progress = document.getElementById("ivcs-queue-progress-container");
    if (progress) {
        progress.parentNode.removeChild(progress);
    }
    ivcsCustomer.destroy();
};
/**
 * 判断是否在2个日期之间
 * @param {*} times ： 时间数组
 * @param {*} begin ： 开始日期
 * @param {*} end ： 结束日期
 * @returns
 */
export const isBetweenDate = (times, begin, end) => {
    if (!times || times.length <= 0) {
        return false;
    }
    if (!begin && !end) {
        return true;
    }
    let isBetween = false;
    for (let time of times) {
        time = moment(time.begin).format("YYYY-MM-DD");

        if (begin && end) {
            begin = moment(begin).format("YYYY-MM-DD");
            end = moment(end).format("YYYY-MM-DD");
            isBetween = moment(time).isBetween(begin, end, undefined, "[]");
        } else if (begin) {
            begin = moment(begin).format("YYYY-MM-DD");
            isBetween = moment(time).isBetween(
                begin,
                undefined,
                undefined,
                "[]"
            );
        } else {
            end = moment(end).format("YYYY-MM-DD");
            isBetween = moment(time).isSameOrBefore(end);
        }
        if (isBetween) {
            break;
        }
    }
    return isBetween;
};

export const navigateTo = (url) => {
    if (wx && wx.miniProgram && wx.miniProgram.navigateTo) {
        wx.miniProgram.navigateTo({ url: url });
    }
};

/**
 * 判断是否在小程序web-view环境
 * @returns
 */
export const isInWechatMP = () => {
    return (
        (navigator.userAgent.match(/micromessenger/i) &&
            navigator.userAgent.match(/miniprogram/i)) ||
        window.__wxjs_environment === "miniprogram"
    );
};

export const scanCode = (callback) => {
    wx.checkJsApi({
        jsApiList: ["scanQRCode"], // 需要检测的 JS 接口列表，所有 JS 接口列表见附录2,
        success: function (res) {
            // 以键值对的形式返回，可用的 api 值true，不可用为false
            // 如：{"checkResult":{"chooseImage":true},"errMsg":"checkJsApi:ok"}
            console.warn("checkJsApi ", res);
        },
    });
    // Scan code only from camera
    if (wx && wx.scanQRCode) {
        wx.scanQRCode({
            needResult: 1, // 默认为0，扫描结果由微信处理，1则直接返回扫描结果，
            scanType: ["qrCode"], // 可以指定扫二维码还是一维码，默认二者都有
            success: function (res) {
                console.log(res);
                callback && callback(res.resultStr); // 当needResult 为 1 时，扫码返回的结果
            },
            fail: (err) => {
                console.log(err);
                callback && callback("");
            },
        });
    }
};

export const isWechat = () => {
    return /MicroMessenger/i.test(window.navigator.userAgent);
};

export const formatMindrayTime = (time) => {
    if (!time || time === "00000000000000") return "-";
    if (time.length > 14) return time;
    time = time + "";
    time = time.slice(0, 8) + "T" + time.slice(8);
    return moment(time).format("YYYY-MM-DD HH:mm");
};
export const getDuration = (begin, end) => {
    // const start = new Date(begin).getTime();
    // const stop = new Date(end).getTime();
    // const duration = stop - start;
    // return new Date(duration * 1000).toISOString().substring(11, 16);

    let diff = moment(end).diff(moment(begin));

    // execution
    return moment.utc(diff).format("mm:ss");
};

/**
 * 判断是否在2个时间之间
 * @param {*} time ： 时间
 * @param {*} begin ： 开始时间
 * @param {*} end ： 结束时间
 * @returns
 */
export const isBetweenTime = (time, begin, end) => {
    if (!time || !begin || !end) {
        return false;
    }
    
    // 定义当天的开始时间和结束时间
    const beginParts = begin.split(":");
    const beginHour = parseInt(beginParts[0]);
    const beginMinute = parseInt(beginParts[1]);
    const beginSecond = parseInt(beginParts[2]);
    const startTime = moment().startOf('day').add(beginHour, 'hours').add(beginMinute, 'minutes').add(beginSecond, 'seconds'); //
    const endParts = end.split(":");
    const endHour = parseInt(endParts[0]);
    const endMinute = parseInt(endParts[1]);
    const endSecond = parseInt(endParts[2]);
    const endTime = moment().startOf('day').add(endHour, 'hours').add(endMinute, 'minutes').add(endSecond, 'seconds'); // 今天的 18:51:00

    // 获取当前时间
    var currentTime = moment(time);

    // 检查当前时间是否在 startTime 和 endTime 之间
    if (currentTime.isBetween(startTime, endTime)) {
        console.log("当前时间在指定的时间段内");
        return true;
    } else {
        console.log("当前时间不在指定的时间段内", time, begin, end);
        return false;
    }
};

/**
 * 动态加载js文件
 * @param {*} FILE_URL ： js文件
 * @param {*} async ： 是否异步
 * @param {*} type ： 文件类型
 * @returns
 */
export const loadScript = (FILE_URL, async = true, type = "text/javascript") => {
    return new Promise((resolve, reject) => {
        try {
            const scriptEle = document.createElement("script");
            scriptEle.type = type;
            scriptEle.async = async;
            scriptEle.src =FILE_URL;

            scriptEle.addEventListener("load", (ev) => {
                console.log('load success ', ev);
                resolve({ status: true });
            });

            scriptEle.addEventListener("error", (ev) => {
                console.error('load error ', ev);
                reject({
                    status: false,
                    message: `Failed to load the script ＄{FILE_URL}`
                });
            });

            document.body.appendChild(scriptEle);
        } catch (error) {
            reject(error);
        }
    });
};



/**
 * 匹配服务场景 产品线-所属分公司-服务场景
 * @param {*} productLine ： 产品线
 * @param {*} salesOffice ： 所属分公司
 * @param {*} scene ： 服务场景
 * @param {*} ZQD_ID 渠道商代码
 * @returns
 * 1.若产品线不存在，或者和业务场景里的产品线占位符匹配不了则选业务场景是“总部-服务场景”
   2.若所属分公司不存在或者和业务场景的所属分公司匹配不了则使用“总部”替代所属分公司再次匹配
   3.如果获取的渠道商代码ZQD_ID不为空，则把此呼叫路由至 产线-渠道商代码-设备故障/应用 服务场景（比如 30 - 100000001 - 设备故障类）
 */

export const matchSceneName = (productLine = '', salesOffice = '', scene, ZQD_ID = '') => {
    console.log('matchSceneName', productLine, salesOffice, scene, ZQD_ID);
    let result = `总部-${scene}`
    if (productLine && ZQD_ID) {
        result = `${productLine}-${ZQD_ID}-${scene}`
        return result
    }
    if (!productLine || !productLineList.includes(productLine+'') ) {
        result = `总部-${scene}`
    } else if (!salesOffice || !branchList.includes(salesOffice+'')) {
        result = `${productLine}-总部-${scene}`
    } else {
        result = `${productLine}-${salesOffice}-${scene}`
    }
    return result

}